//
// Created by 85397 on 2023/8/20.
//

#include "mytaskinit.h"
#include "main.h"

//任务优先级
#define START_TASK_PRIO		1
//任务堆栈大小
#define START_STK_SIZE 		128
//任务句柄
TaskHandle_t StartTask_Handler;
//任务函数

//任务优先级
#define LED0_TASK_PRIO		2
//任务堆栈大小
#define LED0_STK_SIZE 		50
//任务句柄
TaskHandle_t LED0Task_Handler;
//任务函数
void led0_task(void *pvParameters);

//任务优先级
#define LED1_TASK_PRIO		2
//任务堆栈大小
#define LED1_STK_SIZE 		50
//任务句柄
TaskHandle_t LED1Task_Handler;
//任务函数
void led1_task(void *pvParameters);


//开始任务任务函数
void start_task(void *pvParameters)
{
    taskENTER_CRITICAL();           //进入临界区
    //创建LED0任务
    xTaskCreate((TaskFunction_t )led0_task,
                (const char*    )"led0_task",
                (uint16_t       )LED0_STK_SIZE,
                (void*          )NULL,
                (UBaseType_t    )LED0_TASK_PRIO,
                (TaskHandle_t*  )&LED0Task_Handler);
    //创建LED1任务
    xTaskCreate((TaskFunction_t )led1_task,
                (const char*    )"led1_task",
                (uint16_t       )LED1_STK_SIZE,
                (void*          )NULL,
                (UBaseType_t    )LED1_TASK_PRIO,
                (TaskHandle_t*  )&LED1Task_Handler);
    vTaskDelete(StartTask_Handler); //删除开始任务

    taskEXIT_CRITICAL();            //退出临界区
}

//开始任务调度
void taskinit()
{
    //创建开始任务
    xTaskCreate((TaskFunction_t )start_task,            //任务函数
                (const char*    )"start_task",          //任务名称
                (uint16_t       )START_STK_SIZE,        //任务堆栈大小
                (void*          )NULL,                  //传递给任务函数的参数
                (UBaseType_t    )START_TASK_PRIO,       //任务优先级
                (TaskHandle_t*  )&StartTask_Handler);   //任务句柄
    vTaskStartScheduler();          //开启任务调度
}

//LED0任务函数
void led0_task(void *pvParameters)
{
    for (;;)
    {
        gpio_bit_toggle(PORT_LED2,PIN_LED2);
        vTaskDelay(1000);

    }
}

//LED1任务函数
void led1_task(void *pvParameters)
{
    for(;;)
    {
        gpio_bit_toggle(PORT_LED1,PIN_LED1);
        vTaskDelay(200);
        gpio_bit_toggle(PORT_LED1,PIN_LED1);
        vTaskDelay(800);

    }
}